package nan.StackAndQueue;

//使用链表
public class MyQueue {
    static class Node{
        int val;
        Node next;

        public Node(int val) {
            this.val = val;
        }
    }
    //创建一个链表头结点
    private Node head=null;
    private Node tail=null;
    //队列的核心操作
    //1.入队列,返回值表示插入成功/失败（也是为了和标准库的队列的offer接口看齐）
    public boolean offer(int val){
        Node newNode=new Node(1);
        //插入到链表尾部
        if(head==null){
            head=newNode;
            tail=newNode;
            return true;
        }
        tail.next=newNode;
        tail=tail.next;
        return true;
    }
    //2.出队列
    public Integer poll(){
        if(head==null){
            return null;
        }
        int ret= head.val;
        if(head.next==null){
            head=null;
        }
        head=head.next;
        return ret;
    }
    //3.取队首元素
    public Integer peek(){
        if(head==null){
            return null;
        }
        return head.val;
    }

}
